#ifndef REQUIREMENT_H_
#define REQUIREMENT_H_

#include <string>
#include <list>

class Context;

/// Interface for the requirement testing mechanism.
class Requirement {
public:
    virtual ~Requirement() { };
    
    virtual bool evaluate(Context&) = 0;
    virtual std::string to_string(Context&) = 0;
    virtual std::size_t count(Context&) = 0;
    virtual std::list<class Course> courses() = 0;
};

#endif
